using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NHibernate;
using NHibernate.Criterion;
using Didsoft.DataAccess.Hibernate;
using Didsoft.DataAccess.Contracts;
using SIOGDE.AccesoDatos.Entidades;
using SIOGDE.AccesoDatos.Contratos;

using SIOGDE.AccesoDatos.Entidades.Lites;

namespace SIOGDE.AccesoDatos.Contexto
{
   public class MediaAccesoDatos : DataAccessBasic<Media>, IMediaAccesoDatos
   {
     public MediaAccesoDatos()
     {
     }
     
     /// <summary>
     /// Devuelve una lista IList<Media> con todas las ocurrencias encontradas, en base a filtro.
     /// </summary>
     /// <param name="filtro"></param>
     /// <returns></returns>
     public IList<Media> BuscarPorFiltro(string filtro)
     {
             ICriteria criteria = Session.CreateCriteria(typeof(Media));
             criteria.Add(Expression.Like("TituloRecurso", "%" + filtro + "%")); 
             return criteria.List<Media>();
     }


     public Media GetPorGuid(string guid)
     {
         string hql = "from Media where GuidSolicitante = :guid";
         var query = Session.CreateQuery(hql);
         query.SetAnsiString("guid", guid);
         return query.UniqueResult<Media>();
     }

     public IList<MediaLite> BuscarPorFiltroLite(string filtro)
     {

         var sql = @"select Id = m.MediaId,
                            m.GuidSolicitante,
                            m.FechaCreacion,
                            m.TituloRecurso
                       from Media m
                        where m.tituloRecurso like :filtro";

         var query = Session.CreateSQLQuery(sql);
         query.SetAnsiString("filtro", "%"+filtro+"%");
         return query.ListBeanTransformer<MediaLite>();

     }

   }

}

